﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;
using System.Text.RegularExpressions;

namespace vudu.PaginasWeb.G3RegistroSistema
{
    public partial class RegistrarProfesor : System.Web.UI.Page
    {
        Rol miRol = new Rol(); /// Objeto tipo Rol para todo el manejo de la clase Rol
        private int _longMinCorreo = 3;
        private int _longMaxCorreo = 38;
        private int _longMinCedula = 7;
        private int _longMaxCedula = 8;
        private int _longMinPass = 6;
        private int _longMaxPass = 20;
        private int num = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            obligatorio1.Visible = false;
            obligatorio1.Text = "";
            obligatorio2.Visible = false;
            obligatorio2.Text = "";
            obligatorio3.Visible = false;
            obligatorio3.Text = "";
        }

        protected void Button1_Click1(object sender, EventArgs e)
        {
            bool val1 = true;
            bool val2 = true;
            bool val3 = true;
            int ci; string correo; string clave; string cii;

            if ((this.ValidarCampos() == true))
            {
                cii = cedula.Text;
                correo = mail.Text + "@prof.vudu.com";
                clave = pass.Text;

                ci = int.Parse(cii);

                /// Verifica si el estudiante exites
                if (miRol.VerificarCedulaProfesor(ci) == false)
                {
                    Mensaje1.Text = "Operación Fallida: El profesor no existe";
                    Mensaje1.CssClass = "transaccionFallida";
                    Mensaje1.Visible = true;
                    val1 = false;
                }
                /// verifica que el correo no se repita
                if (miRol.VerificarCorreo(correo) == true)
                {
                    Mensaje2.Text = "Operación Fallida: El correo ya es utilizado";
                    Mensaje2.CssClass = "transaccionFallida";
                    Mensaje2.Visible = true;
                    val2 = false;
                }
                ///verifica que el estudiante no tenga un rol
                if (miRol.VerificarRol(ci, 2) == true)
                {
                    Mensaje1.Text = "Operación Fallida: El profesor ya esta registrado";
                    Mensaje1.CssClass = "transaccionFallida";
                    Mensaje1.Visible = true;
                    val3 = false;
                }

                if ((val1 == true) && (val2 == true) && (val3 == true))
                {
                    Rol rolActual = new Rol();
                    rolActual.Correo = correo;
                    rolActual.Password = clave;
                    rolActual.FkProf = ci;

                    miRol.RegistrarRol(rolActual, 2);
                    Mensaje1.Text = "El profesor se registro con éxito";
                    Mensaje1.CssClass = "transaccionExitosa";
                    Mensaje1.Visible = true;
                }
                this.VaciarCampos();
            }
        }

        public void VaciarCampos()
        {
            cedula.Text = mail.Text = pass.Text = "";
        }

        public bool ValidarCampos()
        {
            bool val1 = true;
            bool val2 = true;
            bool val3 = true;
            bool val4 = true;
            val1 = this.ValidarCedula(cedula.Text);
            val2 = this.ValidarCorreo(mail.Text);
            val3 = this.ValidarPassword(pass.Text);
            if (cedula.Text == "")  /// Valida si el campo de la cedula es vacio
            {
                obligatorio1.Text = "Debe introducir su cedula";
                obligatorio1.CssClass = "mensaje";
                obligatorio1.Visible = true;
                val4 = false;
            }
            if (mail.Text == "")    /// Valida si el campo del mail es vacio
            {
                obligatorio2.Text = "Debe introducir el usuario";
                obligatorio2.CssClass = "mensaje";
                obligatorio2.Visible = true;
                val4 = false;
            }
            if (pass.Text == "")    /// Valida si el campo del password es vacio
            {
                obligatorio3.Text = "Debe introducir el password";
                obligatorio3.CssClass = "mensaje";
                obligatorio3.Visible = true;
                val4 = false;
            }
            if ((val1 == true) && (val2 == true) && (val3 == true) && (val3 == true))
                return true;
            else
                return false;
        }

        /// <summary>
        /// Metodo para validar que la cedula sea solo numero
        /// y su longitud
        /// </summary>
        /// <param name="ci"></param>
        /// <returns></returns>
        public bool ValidarCedula(string ci)
        {
            bool esValido = false;
            esValido = int.TryParse(ci, out num);
            if (!esValido)  /// solo numeros
            {
                obligatorio1.Text = "Solo numeros";
                obligatorio1.CssClass = "mensaje";
                obligatorio1.Visible = true;
                return false;
            }
            else if ((ci.Length < _longMinCedula) || (ci.Length > _longMaxCedula))  /// mayor que 7 y menor que 8
            {
                obligatorio1.Text = "Cedula no valida";
                obligatorio1.CssClass = "mensaje";
                obligatorio1.Visible = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        /// <summary>
        /// Metodo para validar que el correo no tenga caracteres especiales
        /// y que tenga una longitud aceptada
        /// </summary>
        /// <param name="correo"></param>
        /// <returns></returns>
        public bool ValidarCorreo(string correo)
        {
            Regex regex = new Regex(@"\W");
            Regex rege = new Regex(@"\s");

            if ((regex.IsMatch(correo)) || (rege.IsMatch(correo)))    /// valida que no tenga caracteres especiales
            {
                obligatorio2.Text = "Correo invalido";
                obligatorio2.CssClass = "mensaje";
                obligatorio2.Visible = true;
                return false;
            }
            else if ((correo.Length < _longMinCorreo) || (correo.Length > _longMaxCorreo))  /// mayor que 3 y menor que 38
            {
                obligatorio2.Text = "Longitud del correo invalida";
                obligatorio2.CssClass = "mensaje";
                obligatorio2.Visible = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        /// <summary>
        /// Metodo para validar que la longitud del password sea mayor que 6 y menor que 20
        /// </summary>
        /// <param name="pass"></param>
        /// <returns></returns>
        public bool ValidarPassword(string pass)
        {
            if ((pass.Length < _longMinPass) || (pass.Length > _longMaxPass))
            {
                obligatorio3.Text = "6 a 20 caracteres";
                obligatorio3.CssClass = "mensaje";
                obligatorio3.Visible = true;
                return false;
            }
            else
            {
                return true;
            }
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("Registro.aspx");
        }

        
    }
}